<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>KgGlobalData类说明文档</title>
    <style>
        body {
            font-family: 'Microsoft YaHei', Arial, sans-serif;
            line-height: 1.6;
            color: #333;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
        h1 {
            color: #0066cc;
            border-bottom: 2px solid #0066cc;
            padding-bottom: 10px;
        }
        h2 {
            color: #0066cc;
            border-bottom: 1px solid #ddd;
            padding-bottom: 5px;
            margin-top: 30px;
        }
        h3 {
            color: #333;
            margin-top: 20px;
        }
        pre {
            background-color: #f5f5f5;
            padding: 10px;
            border-radius: 5px;
            overflow-x: auto;
        }
        code {
            font-family: Consolas, Monaco, 'Andale Mono', monospace;
            background-color: #f5f5f5;
            padding: 2px 4px;
            border-radius: 3px;
        }
        table {
            border-collapse: collapse;
            width: 100%;
            margin: 20px 0;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px 12px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        .note {
            background-color: #e6f7ff;
            border-left: 4px solid #1890ff;
            padding: 10px;
            margin: 15px 0;
        }
        .warning {
            background-color: #fff7e6;
            border-left: 4px solid #fa8c16;
            padding: 10px;
            margin: 15px 0;
        }
        .diagram {
            text-align: center;
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <h1>KgGlobalData类说明文档</h1>
    
    <h2>1. 类概述</h2>
    <p>KgGlobalData类是一个全局数据管理类，主要用于存储和管理BA项目中的全局配置参数、状态信息和策略配置。该类采用静态成员变量的方式，使得系统中的各个模块都能方便地访问和共享这些数据。</p>
    
    <div class="note">
        <p><strong>版本信息：</strong> 当前版本适用于 BA-10-V3.8.0</p>
    </div>

    <h2>2. 类特点</h2>
    <p>KgGlobalData类具有以下特点：</p>
    <ul>
        <li>采用静态成员变量设计，无需实例化即可访问</li>
        <li>集中管理系统配置参数，便于统一维护</li>
        <li>提供各种策略配置的存储结构，支持灵活的业务逻辑</li>
        <li>包含多种设备状态和控制信息的存储</li>
        <li>支持从配置文件读取参数</li>
    </ul>

    <h2>3. 主要功能</h2>
    <ul>
        <li>存储系统配置参数（串口、设备地址、超时时间等）</li>
        <li>管理IO模块的DI/DO配置和状态</li>
        <li>存储各种策略配置（消防、水浸、防雷、急停等）</li>
        <li>提供数据库连接信息</li>
        <li>管理电池组和电池堆的参数</li>
        <li>提供日志记录功能</li>
        <li>从配置文件读取和初始化参数</li>
    </ul>

    <h2>4. 重要数据结构</h2>
    
    <h3>4.1 电池组和电池堆信息</h3>
    <pre><code>typedef struct BattGroupPara
{
    QString       devType;         //设备类型
    QString       devInstCode;     //电池组所在BA设备实例号
    unsigned int  modbusAddr;      //modbus地址
    unsigned long batCnt;          //电池节数
    unsigned long tempCnt;         //温度个数
}BattGroupPara;

typedef struct BattStackPara
{
    QString       devType;     //设备类型
    QString       devInstCode; //电池堆实例号
    unsigned int  modbusAddr;  //modbus地址
    unsigned int  groupCount;  //电池组数，堆不算在内
}BattStackPara;</code></pre>
    
    <h3>4.2 DI/DO策略配置</h3>
    <pre><code>typedef struct
{
    unsigned int  diIndex;     // DI索引，从0开始编号
    unsigned char alarmValue;  // 1表示常开信号，为1时（闭合时)表示发生告警  0表示常闭信号，为0时（断开时)表示发生告警
    unsigned int  iStrategy;   //
    QString  diName;     // 告警名称
    QString  diOverName; // 告警结束名称
}DI_STU;

typedef struct
{
    unsigned int        doIndex;   // DO索引，从0开始编号
    unsigned int        iStrategy; /* 1:故障灯或故障干结点; 2:禁充干结点; 3:禁放干结点;
    9:消防动作干结点; 101:汇流开关合闸干结点 102:汇流开关分闸干结点 */
}DOStrategy;</code></pre>
    
    <h3>4.3 策略配置结构</h3>
    <pre><code>typedef struct
{
    QList<DI_STU>       diList;     // 采集DI列表
    QList<DOStrategy>   xfCtrlList; // 动作干结点列表
    int  confirmedCount;            // 告警确认次数
    int iNeedBreak;                 // 是否需要跳机
    QString             diName;     // 告警名称
    QString             diOverName; // 告警结束名称
}XFStrategy;

typedef struct
{
    QList<DI_STU>       diCfgList; // 汇流开关反馈DI索引，从0开始编号
    QList<int>          hzDoList; // 合闸DO索引，从0开始编号
    QList<int>          fzDoList; // 故障时分闸DO索引，从0开始编号
    QList<int>          xfTkDoList;// 消防脱扣干结点
    QList<int>          xfSprayTkDoList;// 消防喷洒脱扣干结点
    QList<int>          volDownProtFzDoList; // 低电压保护时分闸DO索引，从0开始编号
}HLKGStrategy;</code></pre>

    <h3>4.4 干结点数据结构</h3>
    <pre><code>typedef struct _DryData
{
    int  zz404D_addr;     // 4路继电器输出4路开关量输入 设备地址
    int  diStartRegAddr;  // DI起始寄存器地址
    int  doStartRegAddr;  // DO起始寄存器地址
    int  devDoCount;      // ZZ-IO的输出干结点总个数
    int  devDiCount;      // ZZ-IO的输入干结点总个数
    float tkDelayTime;    // 控制合闸分闸时，延时时间，单位：秒
    float rwTimeoutSec;   // IO模块读写超时时间，单位：秒

    quint16 failedCount;  // 通信失败次数
    quint16 readDiCount;  // 读取到DI次数

    quint16 IOCtrl;       // 读取到DO值
    quint16 DIVal;        // 读取到DI值
    quint16 usErrorLen;   // 错误报文长度
    char errorBuf[50];    // 错误报文
}DryData;</code></pre>

    <h2>5. 主要静态成员变量</h2>
    <table>
        <tr>
            <th>变量名</th>
            <th>类型</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>ms_comDevName</td>
            <td>QString</td>
            <td>BA与串口继电器通信接口，默认为:ttySAC2</td>
        </tr>
        <tr>
            <td>ms_pRTDB</td>
            <td>CRTDB*</td>
            <td>实时数据库指针</td>
        </tr>
        <tr>
            <td>ms_pStack</td>
            <td>CBattStack*</td>
            <td>电池堆对象指针</td>
        </tr>
        <tr>
            <td>ms_pIOModule</td>
            <td>CIOModule*</td>
            <td>IO模块对象指针</td>
        </tr>
        <tr>
            <td>ms_zz404D_addr</td>
            <td>int</td>
            <td>4路继电器输出4路开关量输入设备地址</td>
        </tr>
        <tr>
            <td>ms_hzEnabled</td>
            <td>int</td>
            <td>是否使能合闸</td>
        </tr>
        <tr>
            <td>ms_faultTkEnabled</td>
            <td>int</td>
            <td>故障时是否脱扣高压箱断路器</td>
        </tr>
        <tr>
            <td>ms_emgTkEnabled</td>
            <td>int</td>
            <td>急停脱扣是否使能</td>
        </tr>
        <tr>
            <td>ms_waterTkEnabled</td>
            <td>int</td>
            <td>水浸脱扣是否使能</td>
        </tr>
        <tr>
            <td>ms_devDoCount</td>
            <td>int</td>
            <td>ZZ-IO的输出干结点总个数</td>
        </tr>
        <tr>
            <td>ms_devDiCount</td>
            <td>int</td>
            <td>ZZ-IO的输入干结点总个数</td>
        </tr>
        <tr>
            <td>ms_tkDelayTime</td>
            <td>float</td>
            <td>控制合闸分闸时，延时时间，单位：秒</td>
        </tr>
        <tr>
            <td>ms_rwTimeoutSec</td>
            <td>float</td>
            <td>IO模块读写超时时间，单位：秒</td>
        </tr>
        <tr>
            <td>ms_xfStrategy</td>
            <td>XFStrategy</td>
            <td>消防配置策略</td>
        </tr>
        <tr>
            <td>ms_waterStrategy</td>
            <td>XFStrategy</td>
            <td>水浸配置策略</td>
        </tr>
        <tr>
            <td>ms_tdStrategy</td>
            <td>XFStrategy</td>
            <td>防雷配置策略</td>
        </tr>
        <tr>
            <td>ms_emgStopStrategy</td>
            <td>XFStrategy</td>
            <td>急停配置策略</td>
        </tr>
        <tr>
            <td>ms_hlkgStrategy</td>
            <td>HLKGStrategy</td>
            <td>汇流开关配置策略</td>
        </tr>
        <tr>
            <td>ms_dryData</td>
            <td>DryData</td>
            <td>干结点数据</td>
        </tr>
        <tr>
            <td>ms_drySecData</td>
            <td>DryData</td>
            <td>第二组干结点数据</td>
        </tr>
        <tr>
            <td>ms_logFile</td>
            <td>KgLogFile</td>
            <td>日志文件对象</td>
        </tr>
        <tr>
            <td>ms_bclogFile</td>
            <td>KgLogFile</td>
            <td>BC日志文件对象</td>
        </tr>
    </table>

    <h2>6. 主要静态方法</h2>
    
    <h3>6.1 配置读取方法</h3>
    <pre><code>static int readConfig();</code></pre>
    <p>从配置文件（xnbmsio.ini）中读取各种参数配置，包括串口名称、设备地址、超时时间、策略配置等。这是KgGlobalData类的核心方法之一，负责初始化所有静态成员变量。</p>
    
    <h3>6.2 实时数据库初始化</h3>
    <pre><code>static int InitRtdb();</code></pre>
    <p>初始化实时数据库，建立与数据库的连接，为系统提供数据存储和访问服务。</p>

    <h2>7. 全局辅助函数</h2>
    <p>KgGlobalData.h/.cpp中还定义了一系列全局辅助函数，用于支持系统的各种操作：</p>
    <ul>
        <li><code>void writeKgLogfile(QString strInfo, bool bSaveToFile=false);</code> - 写入日志信息</li>
        <li><code>void writeKgBcLogfile(QString strInfo, bool bSaveToFile=false);</code> - 写入BC日志信息</li>
        <li><code>void getCurrentTime(int &year, int &month, int &day, int &h, int &m, int &s, int &msec);</code> - 获取当前时间</li>
        <li><code>int NeedBreakJCQCount();</code> - 获取需要断开接触器的电组池总组数</li>
        <li><code>int NeedCloseJCQCount();</code> - 获取需要闭合接触器的电组池总组数</li>
        <li><code>void SetBamsFireAlarm(char alarm);</code> - 通知消防告警到BAMS</li>
        <li><code>void SetBamsWaterAlarm(char waterAlarm);</code> - 通知水浸告警到BAMS</li>
        <li><code>void SetEmergeStopAlarm(char alarm);</code> - 通知BA紧急停机</li>
        <li><code>CIOModule * getIOModule();</code> - 获取IO模块对象</li>
    </ul>

    <h2>8. 使用示例</h2>
    <p>以下是KgGlobalData类的基本使用流程：</p>
    <pre><code>// 初始化KgGlobalData类
KgGlobalData::readConfig();
KgGlobalData::InitRtdb();

// 访问配置参数
int devAddr = KgGlobalData::ms_zz404D_addr;
float timeout = KgGlobalData::ms_rwTimeoutSec;

// 获取IO模块对象
CIOModule *pIOModule = getIOModule();

// 读取DI状态
quint16 diValue = pIOModule->usDI[0]; // 读取第一路DI状态

// 控制DO状态
pIOModule->usDOCtrl[0] = 1; // 设置第一路DO状态

// 记录日志
writeKgLogfile("系统初始化完成", true);</code></pre>

    <h2>9. 注意事项</h2>
    <div class="warning">
        <p>1. KgGlobalData类中的静态成员变量在多线程环境下访问时需要注意线程安全问题。</p>
        <p>2. 修改配置参数时，应确保参数值在有效范围内，避免系统异常。</p>
        <p>3. 在使用KgGlobalData类之前，必须先调用readConfig()方法初始化参数。</p>
        <p>4. 策略配置的修改可能会影响系统的安全性，应谨慎操作。</p>
        <p>5. 日志记录功能可能会占用系统资源，在资源受限的环境中应适当控制日志输出量。</p>
    </div>

    <h2>10. 相关类</h2>
    <p>KgGlobalData类与以下类有关联：</p>
    <ul>
        <li><strong>CRTDB</strong>：实时数据库类，提供数据存储和访问服务</li>
        <li><strong>CBattStack</strong>：电池堆类，管理电池堆相关操作</li>
        <li><strong>CIOModule</strong>：IO模块类，管理DI/DO状态</li>
        <li><strong>KgLogFile</strong>：日志文件类，提供日志记录功能</li>
        <li><strong>DryCtrlThread</strong>：干结点控制线程类，负责干结点的控制逻辑</li>
    </ul>

    <div class="note">
        <p>文档创建日期：2024年5月</p>
        <p>适用版本：BA-10-V3.8.0</p>
    </div>
</body>
</html>